package com.gxuwz.stats.service.impl;

import com.alibaba.excel.EasyExcel;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gxuwz.stats.entity.User;
import com.gxuwz.stats.listener.UserDataListener;
import com.gxuwz.stats.mapper.UserMapper;
import com.gxuwz.stats.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.stereotype.Service;

import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper,User> implements UserService {
    @Autowired
    private UserMapper userMapper;
    @Override
    public User findByPassword(String username, String password) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", username).eq("password", password);
        return this.getOne(queryWrapper);
    }

    @Override
    public Integer getUserIdByUsername(String username) {
        User user = this.lambdaQuery()
                .eq(User::getUsername, username)
                .select(User::getUserId) // 假设用户ID字段是 userId
                .one();
        return user != null ? user.getUserId() : null;
    }


    @Override
    public int resetUserPwd(String username, String password)
    {
        return userMapper.resetUserPwd(username, password);
    }

    @Override
    public User findByUsername(String username) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", username);
//        List<User> userList = userMapper.selectList(queryWrapper);
//        if (userList == null || userList.isEmpty()) {
//            throw new RuntimeException("未找到用户名为 " + username + " 的用户");
//        }
//        return userList.get(0);
        return this.getOne(queryWrapper);
//        return userMapper.selectOne(queryWrapper);
    }
    @Override
    public boolean existsByUsername(String username) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", username);
        return userMapper.selectCount(queryWrapper) > 0;
    }

    /**
     * 解析导入文件
     * @param inputStream
     * @param updateSupport
     * @return
     */
    public List<User> importExcel(InputStream inputStream, boolean updateSupport) {
        List<User> users = new ArrayList<>();
        // 使用 EasyExcel 解析 Excel 文件
        EasyExcel.read(inputStream, User.class, new UserDataListener(users, userMapper, updateSupport)).sheet().doRead();
        return users;
    }

//        @Override
//        public Integer getUserIdByUsername(String username) {
//            User user = this.lambdaQuery()
//                    .eq(User::getUsername, username)
//                    .select(User::getUserId) // 假设用户ID字段是 userId
//                    .one();
//            return user != null ? user.getUserId() : null;
//        }



    /**
     * 根据用户名和部门查询用户ID。如果用户不存在，则插入新用户。
     *
     * @param username   用户名
     * @param department 部门
     * @param degree     学位
     * @param position   职称
     * @param post       职务
     * @return 用户ID
     */
    public Integer getUserIdOrInsertUser(String username, String department, String degree, String position, String post) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("username", username)
                .eq("department", department);
        User existingUser = userMapper.selectOne(queryWrapper);

        if (existingUser != null) {
            // 用户已存在，返回用户ID
            return existingUser.getUserId();
       }
        else {
            // 用户不存在，插入新用户
            User newUser = new User();
            newUser.setUsername(username);
            newUser.setDepartment(department);
            newUser.setDegree(degree);
            newUser.setPosition(position);
            newUser.setPost(post);
            newUser.setPassword(new BCryptPasswordEncoder().encode("123456")); // 设置默认密码
            newUser.setRole("普通用户"); // 设置默认角色

            userMapper.insert(newUser);
            return newUser.getUserId(); // 返回新用户的ID
        }
//        return null;
    }

//    @Override
//    public User getByUsernameAndPassword(String username, String password) {
//        // 实现数据库查询逻辑
//        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
//        queryWrapper.eq("username", username).eq("password", password);
//        return this.getOne(queryWrapper);
//    }

//    @Autowired
//    private UserMapper userMapper;
//    /**
//     * 通过用户名查询用户
//     *
//     * @param userName 用户名
//     * @return 用户对象信息
//     */
//    @Override
//    public User selectUserByUserName(String userName)
//    {
//        return userMapper.selectUserByUserName(userName);
//    }
//
//    /**
//     * 通过用户ID查询用户
//     *
//     * @param userId 用户ID
//     * @return 用户对象信息
//     */
//    @Override
//    public User selectUserById(Integer userId)
//    {
//        return userMapper.selectUserById(userId);
//    }
//
//    /**
//     * 新增保存用户信息
//     *
//     * @param user 用户信息
//     * @return 结果
//     */
//    @Override
//    @Transactional
//    public int insertUser(User user)
//    {
//        // 新增用户信息
//        int rows = userMapper.insertUser(user);
//        return rows;
//    }
//
//    /**
//     * 注册用户信息
//     *
//     * @param user 用户信息
//     * @return 结果
//     */
//    @Override
//    public boolean registerUser(User user)
//    {
//        return userMapper.insertUser(user) > 0;
//    }
//
//    /**
//     * 修改保存用户信息
//     *
//     * @param user 用户信息
//     * @return 结果
//     */
//    @Override
//    @Transactional
//    public int updateUser(User user)
//    {
//        Integer userId = user.getId();
//        return userMapper.updateUser(user);
//    }
//
//    /**
//     * 通过用户ID删除用户
//     *
//     * @param userId 用户ID
//     * @return 结果
//     */
//    @Override
//    @Transactional
//    public int deleteUserById(Integer userId)
//    {
//        return userMapper.deleteUserById(userId);
//    }
//
//    /**
//     * 批量删除用户信息
//     *
//     * @param userIds 需要删除的用户ID
//     * @return 结果
//     */
//    @Override
//    @Transactional
//    public int deleteUserByIds(Integer[] userIds)
//    {
////        for (Long userId : userIds)
////        {
////            checkUserAllowed(new User(Id));
////            checkUserDataScope(userId);
////        }
//
//        return userMapper.deleteUserByIds(userIds);
//    }
}
